/**
 * @file main.cpp
 * @brief HZip主程序入口
 * @details 处理命令行参数，调用相应的压缩/解压缩功能
 */

#include <Application.h>
#include <Window.h>
#include <View.h>
#include <Button.h>
#include <StringView.h>
#include <FilePanel.h>
#include <Path.h>
#include <Entry.h>
#include <Directory.h>
#include <Alert.h>
#include <String.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#include "core/HZipEngine.h"
#include "ui/MainWindow.h"

/**
 * @class HZipApplication
 * @brief 应用程序主类
 */
class HZipApplication : public BApplication {
public:
    /**
     * @brief 构造函数
     */
    HZipApplication() : BApplication("application/x-vnd.HZip") {
        // 创建主窗口
        BRect frame(100, 100, 600, 400);
        fMainWindow = new MainWindow(frame);
        fMainWindow->Show();
    }

    /**
     * @brief 析构函数
     */
    virtual ~HZipApplication() {
    }

    /**
     * @brief 处理命令行参数
     * @param argc 参数数量
     * @param argv 参数数组
     */
    void HandleCommandLine(int argc, char** argv) {
        if (argc < 2) {
            // 无参数时启动GUI界面
            return;
        }

        // 处理命令行参数
        if (strcmp(argv[1], "-c") == 0) {
            // 压缩模式
            if (argc < 5) {
                printf("用法: %s -c [压缩格式] [源文件/目录] [目标文件]\n", argv[0]);
                return;
            }
            
            const char* format = argv[2];
            const char* source = argv[3];
            const char* target = argv[4];
            
            HZipEngine engine;
            if (engine.Compress(format, source, target)) {
                printf("压缩成功: %s\n", target);
            } else {
                printf("压缩失败\n");
            }
            
        } else if (strcmp(argv[1], "-x") == 0) {
            // 解压缩模式
            if (argc < 4) {
                printf("用法: %s -x [源压缩文件] [目标目录]\n", argv[0]);
                return;
            }
            
            const char* source = argv[2];
            const char* target = argv[3];
            
            HZipEngine engine;
            if (engine.Extract(source, target)) {
                printf("解压缩成功: %s\n", target);
            } else {
                printf("解压缩失败\n");
            }
        } else {
            printf("未知命令: %s\n", argv[1]);
            printf("用法:\n");
            printf("  %s -c [压缩格式] [源文件/目录] [目标文件]\n", argv[0]);
            printf("  %s -x [源压缩文件] [目标目录]\n", argv[0]);
        }
        
        // 命令行模式下执行完毕后退出
        be_app->PostMessage(B_QUIT_REQUESTED);
    }

private:
    MainWindow* fMainWindow;
};

/**
 * @brief 主函数
 * @param argc 参数数量
 * @param argv 参数数组
 * @return 程序退出码
 */
int main(int argc, char** argv) {
    HZipApplication app;
    
    // 处理命令行参数
    app.HandleCommandLine(argc, argv);
    
    // 启动应用程序
    app.Run();
    
    return 0;
}